package com.glorystone.ins.service;

import com.glorystone.ins.common.common.PageVo;
import com.glorystone.ins.domain.CapitalRecord;
import com.glorystone.ins.interceptor.PageList;
import com.glorystone.ins.vo.CheckDataVO;
import com.glorystone.ins.vo.OrderQueryConditionVo;
import com.glorystone.ins.vo.ReceivableVO;
import com.glorystone.ins.vo.ReportDataVO;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface IReceivableService {

    PageList<ReceivableVO> findReceivableList(PageVo vo);

    PageList<CheckDataVO> findCheckDataList(PageVo vo);

    Map<?,?> importCheck(MultipartFile myFile, long id);

    Map<?,?> importInvoice(MultipartFile myFile, long id);

    Map<?,?> confirmCheck(long id);

    Map<?,?> confirmInvoice(long id);

    XSSFWorkbook getXlsxWorkbook(String[] headers, List<ReportDataVO> dataset, String fileName);

    List<ReportDataVO> queryReportDataList(ReceivableVO receivable, String reportType);

    PageList<ReceivableVO> queryChannelTableData(PageVo vo);

    BigDecimal getPercent(String percent);

    Map<?,?> updateForOrderCheck(ReceivableVO receivable, String businessContent, String remark);

    CapitalRecord getGatheringDataById(long tid);

    Map<?,?> checkOrderGathering(ReceivableVO receivable);

    Map<?,?> importGathering(MultipartFile myFile, String gatheringDate, long tid);

    Map<?,?> confirmGathering(long tid);

    List<CheckDataVO> queryCheckDataList();

    Map<?,?> checkOrderSettlement(ReceivableVO receivable);

    CapitalRecord getChannelCapitalRecordByOrderId(long ordId);

    ReceivableVO getReceivableForSurrender(long tid);

    Map<?,?> orderSurrender(CapitalRecord record, ReceivableVO receivable);

    void updateOverdueStatus(ReceivableVO receivable);

    List<ReceivableVO> queryOrderCapitalRecord(OrderQueryConditionVo order);

    Map<?,?> doOrderCheck(ReceivableVO receivable);

    String getTypeByStream(InputStream is);
}
